/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;


import BancoDeDados.CriaConexao;
import Logica.Reserva;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Pedro H
 */
public class ReservaDAO {

    private Connection conexao;

    public ReservaDAO() throws SQLException {
        this.conexao = CriaConexao.getConexao();
    }

     public void adiciona(Reserva res) throws SQLException {//adiciona um contato no banco de dados. ele referencia o Contado do pac. logica!

        String sql = "insert into reserva (data, hora_inicio, hora_fim, mat_solicitante, id_sala) values(?,?,?,?,?)"; //o "?" indica que a gente naum sabe o que vai ter como valores

        PreparedStatement stmt = conexao.prepareStatement(sql);
        //seta os valores!!

        stmt.setString(1,  res.getData());
        stmt.setString(2,  res.getHoraIni());
        stmt.setString(3,  res.getHoraFim());
        stmt.setInt(4, res.getMatSolic());
        stmt.setInt(5, res.getIdSala());

        //executa o codigo sql!
        stmt.execute();
        stmt.close();
    }

    public List<Reserva> getLista(int id) throws SQLException {

        String sql = "select *from reserva where codigo like ? "; //seleciona tudo apenas do contato que for igual ao nome passado como parametro
        PreparedStatement stmt = this.conexao.prepareStatement(sql); //prepara a conexao com BD
        stmt.setInt(1, id);
        ResultSet rs = stmt.executeQuery();//executa o que esta encima. ele sempre retorna algo do tipo resultSet...è um ponteiro que anda pela tabela

        List<Reserva> minhaLista = new ArrayList<Reserva>();

        while (rs.next()) {
            Reserva res = new Reserva();
            res.setId(Integer.parseInt(rs.getString("codigo"))); //"Long.valueOF" é um parse para o id
            res.setData(rs.getString("data"));
            res.setHoraIni(rs.getString("hora_inicio"));
            res.setHoraFim(rs.getString("hora_fim"));
            res.setMatSolic(rs.getInt("mat_solicitante"));
            res.setIdSala(rs.getInt("id_sala"));


            minhaLista.add(res);
        }
        rs.close();
        stmt.close();
        return minhaLista;
    }

    public void altera(Reserva res) throws SQLException{
        //update é o codigo de alteraçao do sql!
        String sql = "update reserva set data  = ?, hora_inicio = ?, hora_fim = ?, mat_solicitante = ?, id_sala = ? where codigo = ? ";
        PreparedStatement stmt = conexao.prepareStatement(sql);

        stmt.setString(1,  res.getData());
        stmt.setString(2,  res.getHoraIni());
        stmt.setString(3,  res.getHoraFim());
        stmt.setInt(4, res.getMatSolic());
        stmt.setInt(5, res.getIdSala());
        stmt.setInt(6, res.getIdSala());

        //executa o codigo sql!
        stmt.execute();
        stmt.close();
    }

    public void remove(Reserva res) throws SQLException{

        String sql = "delete from reserva where codigo = ?";
        PreparedStatement stmt = conexao.prepareStatement(sql);

        stmt.setInt(1, res.getId());
        stmt.execute();
        stmt.close();
    }

    public List<Reserva> getListaReservas() throws SQLException {

        String sql = "select *from reserva "; //seleciona tudo apenas do contato que for igual ao nome passado como parametro
        PreparedStatement stmt = this.conexao.prepareStatement(sql); //prepara a conexao com BD
        //stmt.setString(1, nome);
        ResultSet rs = stmt.executeQuery();//executa o que esta encima. ele sempre retorna algo do tipo resultSet...è um ponteiro que anda pela tabela

        List<Reserva> minhaLista = new ArrayList<Reserva>();

        while (rs.next()) {
            Reserva res = new Reserva();
            res.setId(Integer.parseInt(rs.getString("codigo"))); //"Long.valueOF" é um parse para o id
            res.setData(rs.getString("data"));
            res.setHoraIni(rs.getString("hora_inicio"));
            res.setHoraFim(rs.getString("hora_fim"));
            res.setMatSolic(rs.getInt("mat_solicitante"));
            res.setIdSala(rs.getInt("id_sala"));
            minhaLista.add(res);
        }
        rs.close();
        stmt.close();
        return minhaLista;
    }
}


